package com.tjec.project.projectWorkbench.service;

import com.tjec.project.businessWorkbench.domain.BmsBusiness;
import com.tjec.project.projectWorkbench.domain.BmsProjectMember;

import java.util.List;
import java.util.Set;

/**
 * 项目成员Service接口
 *
 * @author cjj
 * @date 2020-04-10
 */
public interface IBmsProjectMemberService {
    /**
     * 查询项目成员
     *
     * @param guid 项目成员guid
     * @return 项目成员
     */
    public BmsProjectMember selectBmsProjectMemberByGuid(String guid);

    /**
     * 查询项目成员列表
     *
     * @param bmsProjectMember 项目成员
     * @return 项目成员集合
     */
    public List<BmsProjectMember> selectBmsProjectMemberList(BmsProjectMember bmsProjectMember);

    /**
     * 查询未包含的项目成员列表
     *
     * @param bmsProjectMember 项目成员
     * @param leader           项目负责人ID
     * @return 项目成员集合
     */
    public List<BmsProjectMember> selectNotInBmsProjectMemberList(BmsProjectMember bmsProjectMember, String leader);

    /**
     * 新增项目成员
     *
     * @param bmsProjectMember 项目成员
     * @return 结果
     */
    public int insertBmsProjectMember(BmsProjectMember bmsProjectMember);

    /**
     * 修改项目成员
     *
     * @param bmsProjectMember 项目成员
     * @return 结果
     */
    public int updateBmsProjectMember(BmsProjectMember bmsProjectMember);

    /**
     * 批量删除项目成员
     *
     * @param guids 需要删除的项目成员guid
     * @return 结果
     */
    public int deleteBmsProjectMemberByGuids(String[] guids, String type)throws Exception;

    /**
     * 删除项目成员信息
     *
     * @param guid 项目成员guid
     * @return 结果
     */
    public int deleteBmsProjectMemberByGuid(String guid, String type) throws Exception;

    /**
     * 查询项目成员
     *
     * @param userId 用户ID
     * @return 项目成员
     */
    public int selectBmsProjectMemberByUserId(String userId);

    /**
     * 通过用户id或项目状态查询该用户在某个状态下的项目IDs
     *
     * @param bmsProjectMember
     * @return 结果
     */
    public Set<String> selectBmsProjectMemberByUserIdOrProjectStatus(BmsProjectMember bmsProjectMember);

    /**
     * 查询历史项目信息变更
     *
     * @param bmsProjectMember
     * @return
     */
    List<BmsProjectMember> selectHistoryProjectList(BmsProjectMember bmsProjectMember);

    /**
     * 统计项目人数
     *
     * @param bmsProjectMember
     * @return 结果
     */
    public Integer countBmsProjectMemberNo(BmsProjectMember bmsProjectMember);


    /**
     * 在项目中项目组员并且不是招标组长/成员为true,否则为false
     * @param userId
     * @param projectId
     * @return
     */
//    public boolean isTenderMember(String userId,String projectId);

    public boolean isTenderMembers(String userId, BmsBusiness bmsBusiness);

    /**
     * 查询项目负责人所属项目下的项目成员中是否存在该用户
     *
     * @param leader 项目负责人ID
     * @return
     */
    List<BmsProjectMember> selectBmsProjectMemberListByLeaderAndUserGuids(String leader, String[] userGuid);

    /**
     * 是否重复添加项目成员
     * @return
     */
    public boolean repeatBmsProjectMember(String projectId, String userId);

    /**
     * 查询负责人人员并且不在项目成员中
     * @param bmsProjectMember
     * @return
     */
    List<BmsProjectMember> selectBmsProjectMemberNoProjectMember(BmsProjectMember bmsProjectMember);
}
